#ifndef __ADAPTER_H__
#define __ADAPTER_H__

class Target
{
public:
    Target() = default;
    virtual ~Target() = default;

    virtual void TargetRequest();
};

class Adaptee
{
public:
    Adaptee() = default;
    virtual ~Adaptee() = default;

    virtual void AdapteeRequest(); 
};

class AdapterA : public Target, private Adaptee
{
public:
    AdapterA() = default;
    ~AdapterA() = default;

    void TargetRequest();
};

class AdapterB : public Target
{
public:
    AdapterB(Adaptee *adptee) { adaptee_ = adptee; }
    ~AdapterB() = default;

    void TargetRequest();

private:
    Adaptee *adaptee_;
};

#endif

